package com.ymx.darling.bean.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 次注解用来标注实体类型<br/>
 * @author 爱java的小于
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface Entity {
    /**
     * 指定实体类对应的表
     * 此属性与下文的entityDef属性不能同时修饰实体
     * @return String
     */
    String table() default "";

    /**
     * schema模式
     * @return String
     */
    String schema() default "";

    /**
     * 是否可填充 该属性为true时每次更新或插入前会执行实体填充逻辑
     * @return boolean 默认true
     */
    boolean fillable() default true;

    /**
     * 表示引用的其他实体类型
     * 此选项必须用来表示vo所引用的其他实体类型
     * @return class 默认Void 表示不引用任何类型
     */
    Class<?> entityDef() default Void.class;

    /**
     * 是否驼峰转下划线命名
     * @return boolean 默认true
     */
    boolean camelToUnderscore() default true;

    /**
     * 实体类侦听器 用于结果集映射的过程中属性赋值的侦听
     * @return 默认不处理逻辑
     */
    Class<?>[] setListener() default {};
}
